home *** CD-ROM | disk | FTP | other *** search
/ Graphics Plus / Graphics Plus.iso / general / modelers / linkedit / linkedit.lha / link-edit / LinkEdit / Link / link_init.c < prev    next >
Encoding:
C/C++ Source or Header  |  1991-03-13  |  7.2 KB  |  251 lines

  1. #include <stdio.h>
  2. #include <X11/Xlib.h>
  3. #include "link_types.h"
  4. #include "link_global.h"
  5.  
  6.  
  7. Window LinkInitialize(gnrc,data)
  8.  
  9. LinkStatus *gnrc;
  10. LinkData *data;
  11.  
  12. {
  13.  
  14.   XSetWindowAttributes xswa;
  15.   XWindowAttributes xwa;
  16.   Window root,top;
  17.   XGCValues xgcv;
  18.   int x,y,width,height;
  19.   Pixmap pxmp;
  20.   XColor xcolor;
  21.   int gray_value,depth;
  22.   char mask,gray_bits[8];
  23.  
  24.   root = data->root;
  25.   depth = DisplayPlanes(dpy,DefaultScreen(dpy));
  26.   XGetWindowAttributes(dpy,root,&xwa);
  27.  
  28.   gnrc->color_ok = 0;
  29.   if(depth > 4) {  /* Allocate color cell for background */
  30.      gnrc->color_ok = 1;
  31.      xcolor.red = xcolor.green = xcolor.blue = 
  32.            (unsigned short) (65535.0 * data->gray);
  33.      xcolor.flags = DoRed | DoGreen | DoBlue;
  34.      if(XAllocColor(dpy,xwa.colormap,&xcolor) == 0) {
  35.         gnrc->color_ok = 0;
  36.         fprintf(stderr,"Display does not support grey background.\n");
  37.        }
  38.      else {
  39.         xswa.background_pixel = xcolor.pixel;
  40.        }
  41.     }
  42.  
  43.   if(gnrc->color_ok == 0) {
  44.      xswa.background_pixel = WhitePixel(dpy,DefaultScreen(dpy)); 
  45.     }
  46.  
  47.   x = (int) (data->x * xppmm);
  48.   y = (int) (data->y * yppmm);
  49.   width = (int) (data->width * xppmm);
  50.   height = (int) (data->height * yppmm);
  51.  
  52.   xswa.border_pixel = BlackPixel(dpy,DefaultScreen(dpy));
  53.   xswa.event_mask = (KeyPressMask|ButtonPressMask|ExposureMask|
  54.                      ButtonReleaseMask|StructureNotifyMask);
  55.  
  56.   top = XCreateWindow(dpy,root,x,y,width,height,
  57.                             data->border,CopyFromParent,
  58.                             InputOutput,CopyFromParent,
  59.                             (CWBackPixel|CWEventMask|CWBorderPixel),
  60.                              &xswa);
  61.                             
  62.   gnrc->TopWindow = top;
  63.   XMapWindow(dpy,top);
  64.  
  65.   /* Create GC and reverse GC for link */
  66.  
  67.   /* Load the font */
  68.  
  69.   if((gnrc->fontstruct = XLoadQueryFont(dpy,data->font)) == NULL) {
  70.     fprintf(stderr,"Can't open font %s\n",data->font);
  71.     exit(1);
  72.    }
  73.  
  74.   gnrc->fth = gnrc->fontstruct->max_bounds.ascent +
  75.                   gnrc->fontstruct->max_bounds.descent;
  76.  
  77.   /* Create the gc */
  78.  
  79.   xgcv.font = gnrc->fontstruct->fid;
  80.   xgcv.foreground = BlackPixel(dpy,DefaultScreen(dpy));
  81.   xgcv.background = WhitePixel(dpy,DefaultScreen(dpy));
  82.   gnrc->gc = XCreateGC(dpy,gnrc->TopWindow,(GCFont|
  83.                             GCForeground|GCBackground),&xgcv);
  84.  
  85.   /* Create the reverse gc */
  86.  
  87.   xgcv.foreground = WhitePixel(dpy,DefaultScreen(dpy));
  88.   xgcv.background = BlackPixel(dpy,DefaultScreen(dpy));
  89.   gnrc->reverse_gc = XCreateGC(dpy,gnrc->TopWindow,(GCFont|
  90.                             GCForeground|GCBackground),&xgcv);
  91.  
  92.   if(data->urgent_present == LINK_YES) CreateLinkUrgentWindow(gnrc,data);
  93.   else gnrc->UrgentWindow = (Window) 0;
  94.  
  95.   if(data->title_present == LINK_YES) CreateLinkTitleWindow(gnrc,data);
  96.   else gnrc->TitleWindow = (Window) 0;
  97.  
  98.   if(data->message_present == LINK_YES) 
  99.      CreateLinkMessageWindow(gnrc,data);
  100.   else gnrc->MessageWindow = (Window) 0;
  101.  
  102.   /* Initialize data */
  103.   gnrc->width = width; gnrc->height = height;
  104.  
  105.   gnrc->hash_space = LINK_HASH_SPACE * xppmm;
  106.   gnrc->hash_height = LINK_HASH_HEIGHT * yppmm;
  107.  
  108.   gnrc->axes = LINK_SHOW;
  109.   if(data->xruler == LINK_YES) gnrc->xruler = LINK_SHOW;
  110.   else  gnrc->xruler = LINK_HIDE;
  111.   if(data->yruler == LINK_YES) gnrc->yruler = LINK_SHOW;
  112.   else gnrc->yruler = LINK_HIDE;
  113.   gnrc->vertices = LINK_SHOW;
  114.   gnrc->arrows = LINK_SHOW;
  115.  
  116.   gnrc->origin.x = data->width/2.0; gnrc->origin.y = data->height/2.0;
  117.   gnrc->origin.dcx = width/2; gnrc->origin.dcy = height/2;
  118.  
  119.   gnrc->xscale = data->xscale;
  120.   gnrc->yscale = data->yscale;
  121.  
  122.   gnrc->link.next = NULL;
  123.   gnrc->num = 0;
  124.   gnrc->choice[0] = LINK_NO_CHOICE;
  125.  
  126.   /* Create data GC */
  127.   if((gnrc->data_fontstruct = XLoadQueryFont(dpy,data->data_font)) == NULL) {
  128.     if((gnrc->data_fontstruct = XLoadQueryFont(dpy,"fixed")) == NULL) {
  129.        fprintf(stderr,"Can't open font %s\n",data->data_font);
  130.        exit(1);
  131.       }
  132.    }
  133.   gnrc->data_fth = gnrc->data_fontstruct->max_bounds.ascent +
  134.                   gnrc->data_fontstruct->max_bounds.descent;
  135.  
  136.   /* Create the gc */
  137.   xgcv.font = gnrc->data_fontstruct->fid;
  138.   xgcv.foreground = BlackPixel(dpy,DefaultScreen(dpy));
  139.   xgcv.background = WhitePixel(dpy,DefaultScreen(dpy));
  140.   xgcv.line_width = LINK_LINE_WIDTH;
  141.   gnrc->data_gc = XCreateGC(dpy,gnrc->TopWindow,(GCFont|
  142.                             GCForeground|GCBackground|GCLineWidth),&xgcv);
  143.  
  144.   xgcv.background = BlackPixel(dpy,DefaultScreen(dpy));
  145.   xgcv.foreground = WhitePixel(dpy,DefaultScreen(dpy));
  146.   gnrc->reverse_data_gc = XCreateGC(dpy,gnrc->TopWindow,(GCFont|
  147.                             GCForeground|GCBackground|GCLineWidth),&xgcv);
  148.  
  149.   /* GC for xor'ing */
  150.   xgcv.function = GXxor;
  151.   xgcv.foreground = xswa.background_pixel^BlackPixel(dpy,DefaultScreen(dpy));
  152.   xgcv.background = xswa.background_pixel; 
  153.  
  154.   gnrc->xor_gc = XCreateGC(dpy,gnrc->TopWindow,(GCForeground|
  155.                              GCBackground|GCFunction),&xgcv);
  156.   /* Create cursor for this window */
  157.   XDefineCursor(dpy,top,XCreateFontCursor(dpy,LINK_CURSOR));
  158. }
  159.  
  160.  
  161. CreateLinkMessageWindow(gnrc,data)
  162.  
  163. LinkStatus *gnrc;
  164. LinkData *data;
  165.  
  166. {
  167.   XSetWindowAttributes xswa;
  168.   XWindowAttributes xwa;
  169.   int width,height,x_offset,y_offset;
  170.  
  171.   XGetWindowAttributes(dpy,gnrc->TopWindow,&xwa);
  172.  
  173.   height = gnrc->fth + 2*LINK_PAD;
  174.   width = xwa.width;
  175.  
  176.   x_offset = 0;
  177.   y_offset = xwa.height - height;
  178.  
  179.  
  180.   xswa.background_pixel = BlackPixel(dpy,DefaultScreen(dpy));
  181.  
  182.   xswa.win_gravity = SouthWestGravity;
  183.   xswa.event_mask = (ExposureMask|ButtonPressMask|ButtonReleaseMask|
  184.                      KeyPressMask);
  185.  
  186.   gnrc->MessageWindow = XCreateWindow(dpy,gnrc->TopWindow,
  187.                            x_offset,y_offset,width,height,
  188.                            0,CopyFromParent,InputOutput,CopyFromParent,
  189.                            (CWBackPixel|CWWinGravity|
  190.                             CWEventMask),&xswa);
  191.  
  192.   LinkPrintMessage(gnrc,data->message);
  193.   XMapWindow(dpy,gnrc->MessageWindow);
  194.  
  195. }
  196.  
  197.  
  198. CreateLinkTitleWindow(gnrc,data)
  199.  
  200. LinkStatus *gnrc;
  201. LinkData *data;
  202.  
  203. {
  204.   XSetWindowAttributes xswa;
  205.   XWindowAttributes xwa;
  206.  
  207.   XGetWindowAttributes(dpy,gnrc->TopWindow,&xwa);
  208.  
  209.   xswa.background_pixel = WhitePixel(dpy,DefaultScreen(dpy));;
  210.   xswa.border_pixel = BlackPixel(dpy,DefaultScreen(dpy));
  211.   xswa.event_mask = (ExposureMask|ButtonPressMask|
  212.                      ButtonReleaseMask);
  213.  
  214.   gnrc->TitleWindow = XCreateWindow(dpy,gnrc->TopWindow,-1,-1,
  215.                             xwa.width+1,gnrc->fth + 2*LINK_PAD+1,1,
  216.                             CopyFromParent,InputOutput,CopyFromParent,
  217.                             (CWBackPixel|CWBorderPixel|CWEventMask),&xswa);
  218.  
  219.   strcpy(gnrc->title,data->title);
  220.   XMapWindow(dpy,gnrc->TitleWindow);
  221.  
  222.  
  223. }
  224.  
  225.  
  226. CreateLinkUrgentWindow(gnrc,data)
  227.  
  228. LinkStatus *gnrc;
  229. LinkData *data;
  230.  
  231. {
  232.   XSetWindowAttributes xswa;
  233.   XWindowAttributes xwa;
  234.  
  235.   XGetWindowAttributes(dpy,gnrc->TopWindow,&xwa);
  236.  
  237.   xswa.background_pixel = WhitePixel(dpy,DefaultScreen(dpy));;
  238.   xswa.border_pixel = BlackPixel(dpy,DefaultScreen(dpy));
  239.   xswa.event_mask = (KeyPressMask|ExposureMask|ButtonPressMask|
  240.                      ButtonReleaseMask);
  241.  
  242.   gnrc->UrgentWindow = XCreateWindow(dpy,gnrc->TopWindow,0,
  243.                           xwa.height/2,xwa.width,gnrc->fth + 2*LINK_PAD,
  244.                             5,CopyFromParent,InputOutput,CopyFromParent,
  245.                             (CWBackPixel|CWBorderPixel|CWEventMask),&xswa);
  246.  
  247. }
  248.  
  249.  
  250.  
  251.